{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn import metrics\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import load_wine\n",
    "from sklearn.pipeline import make_pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus']=False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((178, 13), (178,))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features, target = load_wine(return_X_y=True)  # 三分类酒数据集\n",
    "features.shape, target.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "RANDOM_STATE = 42\n",
    "# 将数据集切分成7:3分别作为训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.30, random_state=RANDOM_STATE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 不适用PCA\n",
    "raw_clf = make_pipeline(StandardScaler(), LogisticRegression())\n",
    "raw_clf.fit(X_train, y_train)\n",
    "pred_test_raw = raw_clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用PCA但不做数据标准化\n",
    "unscaled_clf = make_pipeline(PCA(n_components=2), LogisticRegression())\n",
    "unscaled_clf.fit(X_train, y_train)\n",
    "pred_test = unscaled_clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用PCA并且也做数据标准化\n",
    "std_clf = make_pipeline(StandardScaler(), PCA(n_components=2), LogisticRegression())\n",
    "std_clf.fit(X_train, y_train)\n",
    "pred_test_std = std_clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "不使用PCA,预测准确率98.15%\n",
      "使用PCA但不进行数据标准化,预测准确率74.07%\n",
      "使用PCA并且进行数据标准化,预测准确率98.15%\n"
     ]
    }
   ],
   "source": [
    "# 查看各情况下的分类准确率\n",
    "print('不使用PCA,预测准确率{:.2%}'.format(metrics.accuracy_score(y_test, pred_test_raw)))\n",
    "print('使用PCA但不进行数据标准化,预测准确率{:.2%}'.format( metrics.accuracy_score(y_test, pred_test)))\n",
    "print('使用PCA并且进行数据标准化,预测准确率{:.2%}'.format( metrics.accuracy_score(y_test, pred_test_std)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将PCA信息抽取出来\n",
    "pca = unscaled_clf.named_steps['pca']\n",
    "pca_std = std_clf.named_steps['pca']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "未预处理第一主成分： [ 1.76342917e-03 -8.35544737e-04  1.54623496e-04 -5.31136096e-03\n",
      "  2.01663336e-02  1.02440667e-03  1.53155502e-03 -1.11663562e-04\n",
      "  6.31071580e-04  2.32645551e-03  1.53606718e-04  7.43176482e-04\n",
      "  9.99775716e-01]\n",
      "预处理第一主成分： [ 0.13443023 -0.25680248 -0.0113463  -0.23405337  0.15840049  0.39194918\n",
      "  0.41607649 -0.27871336  0.33129255 -0.11383282  0.29726413  0.38054255\n",
      "  0.27507157]\n"
     ]
    }
   ],
   "source": [
    "# 打印最主要的主成分，注意，它是特征空间中的主成分轴，表达了数据中具有最大方差的方向\n",
    "print('未预处理第一主成分：',pca.components_[0])\n",
    "print('预处理第一主成分：',pca_std.components_[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ny4xEZHYUfwdWCkT5CXAuWa2GrgO34N8pZl9HfgQ8EgJxyIiEershEcegeOPhx//ePhVjJ6eHi6//HLOOussLrroIl577bWst+vq6mL27NmcffbZXH311QB0d3dz0UUXcc4553DJJZfw+uuvZz2WTUtLCx/60IcAuPDCC1m7du3wXoiISJElJf7Onj070vhbsgTZOdfpnLvMOXeOc26Wc+4P+CR5PXCuc66jVGMRkWitWgV79sCECf7P1atHDuvxFi1axPTp01m7di2XXnopzz//fNbbbdu2jeuvv57HH3+cLVu2sH37dl544QVGjBjB6tWrufrqq+nq6sp6LJtdu3Zx1FFHAXDooYeyffv2Yb2OKJjZFDN7LupxiEhpZMbf4VaRixV/V6xYEWn8jbTv1zmXcs4tC/qSRaQCpKsXdXX+el0drFgxalhVjM2bN3P66acDMHfuXE477bSstxs9ejSLFy/miiuuoL29ne7ubmbMmMHJJ5/MhRdeyKOPPsohhxyS9Vg248ePp7u7G/DVkf379w/9RURnIQfng4hIGcsWf4dbRS5W/L344osjjb+aGCciJZWuXowd66+PHQt79w6vitHY2MhTTz0FwG233cbixYuz3m7JkiXMmTOHe++9l3HjxgGwceNGzjzzTFauXEkqlWLNmjVZj2Vz6qmnHvhab+PGjTQ0NAz9RUTAzM4DdgEqUohUgGzxd7hV5GLF34ceeijS+KutpkWkpDZuBOdgy5aDx5wzNmyA979/aI95zTXXcNVVV9HU1MTkyZP5/ve/n/V2F1xwAddddx3f/va3AXj55Zc56aST+PznP89Xv/pVqqqqmDlzJs65Psey+eAHP8jZZ5/Nn/70J37yk5+wfv36ob2ACJjZGOAm4BLgwRy3Kdk69ElbZ7wYdA48nYfBnYOampq812X/+c/HsGfPCDLnsz355H6amvYMcpTe5Zdfzic/+UnOPvtsDj30UBYvXnxgPOE1488880xuuOEGvvnNb7Jv3z5efPFFGhsbufHGG/nKV75CVVUVJ5xwAs45brzxRr785S9TXV3NCSeckPX1vetd72L27Nls2bKFxx57jCeeeKLP7Ya1Dr1zLjGXU0891ZXaqlWrSv6cw5Gk8SZprM5pvP154YUXhnX/nTt3FmgkpREeb3t7u7v//vvdtm3bst4227kBnnYRx1PgS8Bl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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21dff6dd4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对训练数据进行PCA降维以备绘图\n",
    "X_train_nostd = pca.transform(X_train)\n",
    "scaler = std_clf.named_steps['standardscaler']\n",
    "X_train_std = pca_std.transform(scaler.transform(X_train))\n",
    "\n",
    "FIG_SIZE = (10,7)\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=FIG_SIZE)\n",
    "\n",
    "# 不做预处理的PCA\n",
    "for l, c, m in zip(range(0,3), ('blue','red','green'), ('^','s','o')):\n",
    "    ax1.scatter(X_train_nostd[y_train == l, 0], X_train_nostd[y_train == l,1],\n",
    "               color = c,\n",
    "               label = 'class %s' % l,\n",
    "               alpha = 0.5,\n",
    "               marker = m\n",
    "               )\n",
    "    \n",
    "# 不做预处理的PCA\n",
    "for l, c, m in zip(range(0,3), ('blue','red','green'), ('^','s','o')):\n",
    "    ax2.scatter(X_train_std[y_train == l, 0], X_train_std[y_train == l,1],\n",
    "               color = c,\n",
    "               label = 'class %s' % l,\n",
    "               alpha = 0.5,\n",
    "               marker = m\n",
    "               )\n",
    "    \n",
    "ax1.set_title('PCA降维后的训练集')\n",
    "ax2.set_title('特征放缩+PCA降维后的训练集')\n",
    "\n",
    "for ax in (ax1, ax2):\n",
    "    ax.set_xlabel('第一主成分')\n",
    "    ax.set_ylabel('第二主成分')\n",
    "    ax.legend(loc='upper right')\n",
    "    ax.grid()\n",
    "    \n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
